//
// Created by Administrator on 2021/11/23.
//

#ifndef RAY_CASTING_VOLUME_H
#define RAY_CASTING_VOLUME_H


class Volume {
    const int dim[3] = {200, 200, 200};
    int *data;
    float *cData;

    /**
     * 生成正方体体数据
     * @param x 正方形左下角坐标
     * @param y 正方形左下角坐标
     * @param z 正方形左下角坐标
     * @param side 正方体边长
     * @param density 正方体体数据
     */
    void gen_cube(int x, int y, int z, int side, int density);

    /**
     * 生成球体体数据
     * @param x 球体球心坐标
     * @param y 球体球心坐标
     * @param z 球体球心坐标
     * @param radius 球体半径
     * @param density 球体体数据
     */
    void gen_sphere(int x, int y, int z, int radius, int density);

    /**
     * 对体数据进行着色
     */
    void classify();

public:
    Volume();

    ~Volume();

    int *get_dim() {
        return const_cast<int *>(dim);
    }

    float *get_c_data() {
        return cData;
    }

    void generate();
};


#endif //RAY_CASTING_VOLUME_H
